
import request from '@/plugin/axios'
import { Message } from 'element-ui'
let OSS = require('ali-oss')
let client
export let progress // 上传进度
 function getAliToken() {
    // 后端的接口，用来获取临时凭证
  return  request({
        url: 'common/aliOssTmpKey',
        headers: {},
        method: 'post',
    }).then((res) => {
        if (res.RequestId) {
            /**
             *  [accessKeyId] {String}：通过阿里云控制台创建的 或者 通过后端接口获取 AccessKey。
             *  [accessKeySecret] {String}：通过阿里云控制台创建的或者 通过后端接口获取AccessSecret。
             *  [bucket] {String}：通过控制台或PutBucket创建或者 通过后端接口获取bucket。
             *  [region] {String}：bucket所在的区域， 默认oss-cn-hangzhou。
             */
            client = new OSS({
                region: res.Region,
                secure: true, // secure: 配合region使用，如果指定了secure为true，则使用HTTPS访问
                accessKeyId: res.Credentials.AccessKeyId,
                accessKeySecret: res.Credentials.AccessKeySecret,
                stsToken: res.Credentials.SecurityToken,
                bucket: res.Bucket
            })

        } else {
            Message({
                message: '获取阿里云临时token失败',
                type: 'error',
                duration: 5 * 1000
              });
        }
    });
}


/** 
 *  上传文件，大小不能超过5GB 
 * @param {string} ObjName OSS的储存路径和文件名字 
 * @param {string} fileUrl 本地文件 
 * @retruns Promise 
 */
// ObjName为文件名字,可以只写名字，就直接储存在 bucket 的根路径，如需放在文件夹下面直接在文件名前面加上文件夹名称    
export const put = async (ObjName, fileUrl) => {
    try {
        // 算了吧 每次上传都获取临时token 这个过期时间整的我麻了
        await  getAliToken()
        let result = await client.multipartUpload(`${ObjName}`, fileUrl, {
            progress: function (p) {
                progress = p * 100
            }
        })
        return result
    } catch (e) {
    }
}
// 上传成功之后，转换真实的地址
export const signatureUrl = async (ObjName) => {
    try {
        let result = await client.signatureUrl(`${ObjName}`)
        return result
    } catch (e) {
        console.log(e)
    }
}

// 随机UUID
export const getFileNameUUID = () => {
    function rx() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }
    return `${+new Date()}_${rx()}${rx()}`
}